#Область ОписаниеПеременных

&НаКлиенте
Перем УИ_РедакторКодаКлиентскиеДанные Экспорт;

#КонецОбласти

#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	НадписьТекстВыражения =
	"В тексте выражения можно использовать следующие предопределенные параметры:
	|   Результат      - результат вычисления (на входе - значение по умолчанию)
	|   ТекстЯчейки    - текст текущей ячейки
	|   ТекстыЯчеек    - массив текстов ячеек строки
	|   ТекущиеДанные  - структура загруженных значений
	|   ОписаниеОшибки - описание ошибки, выводимое в примечание ячейки и в окно сообщений
	|Встроенные функции, функции общих модулей.";

	ТекстВыражения = Параметры.Выражение;
	ТипРезультата = Параметры.ТипРезультата;
	КолонкиСтроки = Параметры.КолонкиСтроки;

	УИ_РедакторКодаСервер.ФормаПриСозданииНаСервере(ЭтотОбъект);
	УИ_РедакторКодаСервер.СоздатьЭлементыРедактораКода(ЭтотОбъект,
													   "Выражение",
													   Элементы.ПолеТекстовогоДокумента);

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	УИ_РедакторКодаКлиент.ФормаПриОткрытии(ЭтотОбъект);
КонецПроцедуры


#КонецОбласти

#Область ОбработчикиКомандФормы

// Процедура - обаботчик события, при нажатии на кнопку "ОК" Командной панели "ОсновныеДействияФормы"
//
&НаКлиенте
Процедура ОсновныеДействияФормыОК(Команда)

	ОповеститьОВыборе(Новый Структура("Источник, Результат, Выражение", "ФормаРедактированияВыражения", Истина,
		ТекущийТекстВыражения()));

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область РедакторКода

&НаКлиенте
Процедура УстановитьТекстВыражения(НовыйТекст, УстанавливатьОригинальныйТекст = Ложь, НовыйОригинальныйТекст = "")
	УИ_РедакторКодаКлиент.УстановитьТекстРедактора(ЭтотОбъект, "Выражение", НовыйТекст);

	Если УстанавливатьОригинальныйТекст Тогда
		УИ_РедакторКодаКлиент.УстановитьОригинальныйТекстРедактора(ЭтотОбъект, "Выражение", НовыйОригинальныйТекст);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция ТекущийТекстВыражения()
	Возврат УИ_РедакторКодаКлиент.ТекстКодаРедактора(ЭтотОбъект, "Выражение");
КонецФункции

//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПолеРедактораДокументСформирован(Элемент)
	УИ_РедакторКодаКлиент.ПолеРедактораHTMLДокументСформирован(ЭтотОбъект, Элемент);
КонецПроцедуры

//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПолеРедактораПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
	УИ_РедакторКодаКлиент.ПолеРедактораHTMLПриНажатии(ЭтотОбъект, Элемент, ДанныеСобытия, СтандартнаяОбработка);
КонецПроцедуры

//@skip-warning
&НаКлиенте
Процедура Подключаемый_РедакторКодаОтложеннаяИнициализацияРедакторов()
	УИ_РедакторКодаКлиент.РедакторКодаОтложеннаяИнициализацияРедакторов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_РедакторКодаЗавершениеИнициализацииРедактора(ИдентификаторРедактора) Экспорт
	УстановитьТекстВыражения(ТекстВыражения, Истина, ТекстВыражения);
	УИ_ДобавитьКонтекстПолей();
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_РедакторКодаОтложеннаяОбработкаСобытийРедактора() Экспорт
	УИ_РедакторКодаКлиент.ОтложеннаяОбработкаСобытийРедактора(ЭтотОбъект);
КонецПроцедуры

#КонецОбласти

&НаКлиенте
Процедура УИ_ДобавитьКонтекстПолей()
	СтруктураДополнительногоКонтекста = Новый Структура;

	ПустоеОписаниеТипов = Новый ОписаниеТипов;
//	|   ТекущиеДанные  - структура загруженных значений
		
	СтруктураПеременной = Новый Структура;
	СтруктураПеременной.Вставить("Тип", "Массив");
	СтруктураПеременной.Вставить("ПодчиненныеСвойства", Новый Структура);
	СтруктураДополнительногоКонтекста.Вставить("ТекстыЯчеек", СтруктураПеременной);
	
	ТипыРезультата = ТипРезультата.Типы();
	Если ТипыРезультата.Количество() > 0 Тогда
		СтруктураДополнительногоКонтекста.Вставить("Результат", ТипыРезультата[0]);
	Иначе
		СтруктураДополнительногоКонтекста.Вставить("Результат", "");
	КонецЕсли;
	СтруктураДополнительногоКонтекста.Вставить("ТекстЯчейки", "Строка");
	СтруктураДополнительногоКонтекста.Вставить("ОписаниеОшибки", "Строка");
	
	СтруктураПеременной = Новый Структура;
	СтруктураПеременной.Вставить("Тип", "Структура");
	СтруктураПеременной.Вставить("ПодчиненныеСвойства", Новый Структура);
	
	Для Каждого КолонкаКлючЗначение Из КолонкиСтроки Цикл
		СтруктураПоля = Новый Структура;
		
		ТипыКолонки = КолонкаКлючЗначение.Значение.ОписаниеТипов.Типы();
		
		Если ТипыКолонки.Количество() > 0 Тогда
			СтруктураПоля.Вставить("Тип", ТипыКолонки[0]);
		Иначе
			СтруктураПоля.Вставить("Тип", "");
		КонецЕсли;
		СтруктураПоля.Вставить("ПодчиненныеСвойства", Новый Структура);

		СтруктураПеременной.ПодчиненныеСвойства.Вставить(КолонкаКлючЗначение.Значение.ИмяРеквизита, СтруктураПоля);
	КонецЦикла;
	
	СтруктураДополнительногоКонтекста.Вставить("ТекущиеДанные", СтруктураПеременной);
	
	УИ_РедакторКодаКлиент.ДобавитьКонтекстРедактораКода(ЭтотОбъект, "Выражение", СтруктураДополнительногоКонтекста);

КонецПроцедуры


#КонецОбласти